Julia数据分析简明教程:第8节 分类数据 |
您所在的位置:网站首页 › 分类 数据挖掘 › Julia数据分析简明教程:第8节 分类数据 |
分类数据 通常,我们必须处理数据帧中具有少量级别的列: julia> v = ["Group A", "Group A", "Group A", "Group B", "Group B", "Group B"] 6-element Vector{String}: "Group A" "Group A" "Group A" "Group B" "Group B" "Group B"“Vector”中使用的朴素编码将该Vector的每个条目表示为完整的字符串。相反,我们可以通过将字符串替换为一个小级别池中的索引来更有效地表示数据。这样做有两个好处。首先,这样的向量将倾向于使用更少的内存。其次,可以使用“groupby”函数将它们有效地分组。 有两种常见的类型允许执行级别池化: 来自PooledArrays.jl的 PooledVector 来自CategoricalArrays.jl的 CategoricalVector' PooledVector '和' CategoricalVector '的区别如下: PooledVector 适用于数据压缩是唯一目标的情况;CategoricalVector 被设计为另外提供对分类变量的完全支持,包括无序(名义变量)和有序类别(序数变量),代价是只允许' AbstractString '、' AbstractChar '或' Number '元素类型(可选与' Missing '联合)。CategoricalVector 非常有用,特别是当数组(级别)中的唯一值应该尊重有意义的顺序时,比如打印表格、绘制图表或拟合回归模型时。CategoricalArrays。Jl提供了一些函数来设置和检索这个顺序,并根据它比较值。相反,' PooledVector '类型本质上是' Vector '的临时替代品,除了更低的内存使用和更高的性能之外,几乎没有用户可见的区别。 下面我们将展示一些使用CategoricalArrays.jl的示例。请参见CategoricalArrays。Jl文档包,以获取关于分类数组的更多信息。还要注意,在本节中我们只讨论向量,因为我们考虑的是数据帧上下文。但是,通常这两个包都允许处理任何维数的数组。 为了遵循下面的示例,您需要安装CategoricalArrays。首先是Jl包。 julia> using CategoricalArrays julia> cv = categorical(v) 6-element CategoricalArray{String,1,UInt32}: "Group A" "Group A" "Group A" "Group B" "Group B" "Group B"CategoricalVectorss support missing values. julia> cv = categorical(["Group A", missing, "Group A", "Group B", "Group B", missing]) 6-element CategoricalArray{Union{Missing, String},1,UInt32}: "Group A" missing "Group A" "Group B" "Group B" missing除了有效地表示重复数据外,' CategoricalArray '类型还允许我们在任何时候使用' levels '函数有效地确定变量的允许级别(注意,级别可能在数据中实际使用,也可能不使用): julia> levels(cv) 2-element Vector{String}: "Group A" "Group B"levels! 函数还允许更改级别的出现顺序,这对于显示目的或使用有序变量时可能很有用。 julia> levels!(cv, ["Group B", "Group A"]) 6-element CategoricalArray{Union{Missing, String},1,UInt32}: "Group A" missing "Group A" "Group B" "Group B" missing julia> levels(cv) 2-element Vector{String}: "Group B" "Group A" julia> sort(cv) 6-element CategoricalArray{Union{Missing, String},1,UInt32}: "Group B" "Group B" "Group A" "Group A" missing missingBy default, a CategoricalVector is able to represent 2^{32} different levels. You can use less memory by calling the compress function: 默认情况下,CategoricalVector 能够表示 2^{32} '不同的级别。你可以使用更少的内存调用' compress '函数: julia> cv = compress(cv) 6-element CategoricalArray{Union{Missing, String},1,UInt8}: "Group A" missing "Group A" "Group B" "Group B" missingcategorical函数另外接受一个关键字参数compress,当设置为true时,相当于在新向量上调用compress: julia> cv1 = categorical(["A", "B"], compress=true) 2-element CategoricalArray{String,1,UInt8}: "A" "B"如果' ordered '关键字参数被设置为' true ',则结果' CategoricalVector '将是有序的,这意味着它的级别可以测试顺序(而不是抛出错误): julia> cv2 = categorical(["A", "B"], ordered=true) 2-element CategoricalArray{String,1,UInt32}: "A" "B" julia> cv1[1] < cv1[2] ERROR: ArgumentError: Unordered CategoricalValue objects cannot be tested for order using cv2[1] < cv2[2] true你可以使用' isordered '函数检查' CategoricalVector '是否有序,并使用' ordered!的函数改变顺序。 julia> isordered(cv1) false julia> ordered!(cv1, true) 2-element CategoricalArray{String,1,UInt8}: "A" "B" julia> isordered(cv1) true julia> cv1[1] < cv1[2] true |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |